package com.task.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.task.common.entity.custom.Task;
import com.task.common.entity.custom.model.CreateTaskModel;
import com.task.common.entity.custom.model.QueryTaskModel;
import com.task.common.entity.custom.vo.TaskVO;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author Huzz
 * @since 2022-05-21
 */
public interface ITaskService extends IService<Task> {

    /**
     * 创建任务
     * @param model
     * @return
     */
    boolean createTask(CreateTaskModel model);

    /**
     * 根据id更新
     * @param id
     * @param model
     * @return
     */
    boolean updateTask(Integer id, Task model);

    /**
     * 分页查询任务
     * @param pageNum
     * @param pageSie
     * @param model
     * @return
     */
    IPage<TaskVO> findTaskList(Integer pageNum, Integer pageSie, QueryTaskModel model);

    /**
     * 删除一个项目
     * @param id
     * @return
     */
    boolean deleteTask(Integer id);

    /**
     * 导入
     * @param multipartFile
     * @return
     */
    List<Map<String, String>> importTask(MultipartFile multipartFile);

    /**
     * 导出项目列表
     * @param request
     * @param response
     * @param model
     */
    void exportTask(HttpServletRequest request, HttpServletResponse response, QueryTaskModel model);

    /**
     * 任务转派
     * @param taskId
     * @param oldUserId
     * @param newUserId
     * @return
     */
    boolean taskTransfer(Integer taskId, Integer oldUserId, Integer newUserId);

    /**
     * 任务评价/打分
     * @param taskId
     * @param userId
     * @return
     */
    boolean taskEval(Integer taskId, Integer userId, String evaluation, String grade);

    /**
     * 修改评价/打分
     * @param taskId
     * @param userId
     * @param evaluation
     * @param grade
     * @return
     */
    boolean updateEval(Integer taskId, Integer userId, String evaluation, String grade);

    /**
     * 更新任务报告
     * @param taskId
     * @param schedule
     * @param status
     * @return
     */
    boolean submitTaskModification(Integer taskId, Integer schedule, Integer status);

    /**
     * 员工任务列表
     * @param model
     * @return
     */
    List<Task> findCustTaskList(QueryTaskModel model);

}
